package model

const (
	FieldsPathFace       = "FaceListObject.FaceObject"
	FieldsSinglePathFace = "FaceObject"
)

// 人脸对象特征属性
type Face struct {
	// 人脸标识; 必选;required
	FaceID string
	// 信息分类; 必选; 人工采集还是自动采集;required
	InfoKind InfoType
	// 来源标识; 必选; 来源图像信息标识;required
	SourceID string
	// 设备编码; 特定条件下必选; 设备编码，自动采集必选
	DeviceID string
	// 左上角X坐标; 特定条件下必选; 人脸区域，自动采集记录时为必选;required
	LeftTopX int
	// 左上角Y坐标; 特定条件下必选;required
	LeftTopY int
	// 右下角X坐标; 特定条件下必选;required
	RightBtmX int
	// 右下角Y坐标; 特定条件下必选;required
	RightBtmY int
	// 位置标记时间; 可选; 人工采集时有效;required
	LocationMarkTime string
	// 人脸出现时间; 可选;required
	FaceAppearTime string
	// 人脸消失时间; 可选;required
	FaceDisAppearTime string
	// 证件种类; 可选;
	IDType IDType
	// 证件号码; 可选; 有效证件号码
	IDNumber string
	// 姓名; 可选; 人员的中文姓名全称
	Name string
	// 曾用名; 可选; 曾经在户籍管理部门正式登记注册、人事档案中正式记载的姓氏名称
	UsedName string
	// 绰号; 可选; 使用姓名及曾用名之外的名称
	Alias string
	// 性别代码; 可选;
	GenderCode GenderType
	// 年龄上限; 可选; 最大可能年龄
	AgeUpLimit int
	// 年龄下限; 可选; 最小可能年龄
	AgeLowerLimit int
	// 民族代码; 可选; 中国各名族的罗马字母拼写法和代码
	EthicCode string
	// 国籍代码; 可选; 世界各国和地区名称代码
	NationalityCode string
	// 籍贯省市县代码; 可选;
	NativeCityCode string
	// 居住地行政区划; 可选;
	ResidenceAdminDivision string
	// 汉语口音代码; 可选; 汉语口音编码规则
	ChineseAccentCode string
	// 职业类别代码; 可选; 职业分类与代码，不包含代码中“—”
	JobCategory string
	// 同行人脸数; 可选; 被标注人脸的同行人脸数
	AccompanyNumber int
	// 肤色; 可选;
	SkinColor string
	// 发型; 可选;
	HairStyle HairStyleType
	// 发色; 可选;
	HairColor ColorType
	// 脸型; 可选;
	FaceStyle string
	// 脸部特征; 可选;
	FacialFeature string
	// 体貌特征; 可选;
	PhysicalFeature string
	// 口罩颜色; 可选;
	RespiratorColor ColorType
	// 帽子款式; 可选;
	CapStyle HatStyleType
	// 帽子颜色; 可选;
	CapColor ColorType
	// 眼镜款式; 可选;
	GlassStyle GlassesStyleType
	// 眼镜颜色; 可选;
	GlassColor ColorType
	// 是否驾驶员; 特定条件下必选; 0：否；1：是；2：不确定;required
	IsDriver IsDriverType
	// 是否涉外人员; 特定条件下必选; 0：否；1：是；2：不确定;required
	IsForeigner IsForeignerType
	// 护照证件种类; 可选;
	PassportType EnPassportType
	// 出入境人员类别代码; 可选; 出入境人员分类代码
	ImmigrantTypeCode string
	// 是否涉恐人员; 必选; 0：否；1：是；2：不确定
	IsSuspectedTerrorist IsSuspectedTerroristType
	// 涉恐人员编号; 可选;
	SuspectedTerroristNumber string
	// 是否涉案人员; 必选; 0：否；1：是；2：不确定
	IsCriminalInvolved IsCriminalInvolvedType
	// 涉案人员专长代码; 可选;
	CriminalInvolvedSpecilisationCode string
	// 体表特殊标记; 可选;
	BodySpeciallMark string
	// 作案手段; 可选;
	CrimeMethod string
	// 作案特点代码; 可选;
	CrimeCharacterCode string
	// 在逃人员编号; 可选;
	EscapedCriminalNumber string
	// 是否在押人员; 必选; 0：否；1：是；2：不确定，人工采集必填;required
	IsDetainees IsDetaineesType
	// 看守所编码; 可选;
	DetentionHouseCode string
	// 在押人员身份; 可选; 见附录B
	DetaineesIdentity DetaineesIdentityType
	// 在押人员特殊身份; 可选;
	DetaineesSpecialIdentity string
	// 成员类型代码; 可选;
	MemberTypeCode string
	// 是否被害人; 必选; 0：否；1：是；2：不确定;required
	IsVictim IsVictimType
	// 被害人种类; 可选;
	VictimType string
	// 受伤害程度; 可选;
	InjuredDegree InjuredDegreeType
	// 尸体状况代码; 可选;
	CorpseConditionCode string
	// 是否可疑人; 必选; 0：否；1：是；2：不确定
	IsSuspiciousPerson IsSuspiciousPersonType
	// 姿态分布; 可选; 1：平视；2：微仰；3：微俯；4：左微侧脸；5：左斜侧脸；6：左全侧脸；7：右微侧脸；8：右斜侧脸；9：右全侧脸
	Attitude int
	// 相似度; 0; 人脸相似度，[0，1]
	Similaritydegree float64
	// 眉型;
	EyebrowStyle string
	// 鼻型;
	NoseStyle string
	// 胡型;
	MustacheStyle string
	// 嘴唇;
	LipStyle string
	// 皱纹眼袋;
	WrinklePouch string
	// 痤疮色斑;
	AcneStain string
	// 黑痣胎记;
	FreckleBirthmark string
	// 疤痕酒窝;
	ScarDimple string
	// 其他特征;
	OtherFeature string
	// 图像列表; 可选; 可以包含0个或者多个子图像对象
	SubImageList *SubImageInfoListObject
	// 抓拍时间
	ShotTime string
	// 特征值列表
	FeatureList *FeatureInfoListObject
	// 归属分类标签标识
	TabID string

	// 以下是 20 版本新增字段   删除字段不删除
	// 特征属性 0 – 未知 1 – 亚裔
	RaceType int
	// 0：未知1：无帽子2：有帽子（未识别类型）3：普通帽子4：头盔5：安全帽
	WearHat int
	// 0：未知1：无眼镜2：有眼镜（未识别类型）3：普通眼镜4：太阳镜5：黑框眼镜
	WearGlasses int
	// 0：未知1：无口罩2：有口罩
	WearMask int
	// 可带多个对象ID，多个ID间以英文逗号隔开，对象ID中能区分对象类型 可以是同一张背景图的唯一id，也可以是虚拟的唯一id
	RelateObjectID string
	// 0：主驾驶1：副驾驶2：未知
	FaceScene string
	// 名单库中人员Id，根据该id查询到该人员信息
	HumanId string
	// 特征值
	FeatureValue string
	// 人脸相关的电子围栏信息
	FenceCollectionList string

	//来源视图库 id
	SourceViewID string
}

func (c *Face) GetSubImageList() *SubImageInfoListObject {
	return c.SubImageList
}

func (c *Face) GetFeatureList() *FeatureInfoListObject {
	return c.FeatureList
}

func (c *Face) SetFeatureList(param *FeatureInfoListObject) {
	c.FeatureList = param
}

// 批量创建人脸对象
type CreateFaceArrReq struct {
	FaceListObject struct {
		FaceObject []*Face
	}
}

// 获取查询人脸对象
type GetFaceArrResp struct {
	//PageRecordNum  int
	//StartNum       int
	//TotalNum       int
	FaceListObject struct {
		FaceObject []*Face
	}
}

type GetFaceResp struct {
	FaceObject *Face
}
